package main

import (
	"io"
	"os"
	"strings"
)

type rot13Reader struct {
	r io.Reader
}

func (r *rot13Reader) Read(p []byte) (int, error) {
	n, err := r.r.Read(p) // 从底层 io.Reader 读取数据
	if err != nil {
		return n, err
	}
	for i := 0; i < n; i++ {
		// 对每个字节进行 ROT13 转换
		if (p[i] >= 'A' && p[i] <= 'Z') || (p[i] >= 'a' && p[i] <= 'z') {
			if p[i] >= 'A' && p[i] <= 'Z' {
				p[i] = 'A' + (p[i]-'A'+13)%26
			} else {
				p[i] = 'a' + (p[i]-'a'+13)%26
			}
		}
	}
	return n, nil
}

func main() {
	r := strings.NewReader("Lbh penpxrq gur pbqr!") // 这个字符串是 "You cracked the code!" 的 ROT13 编码
	rot13 := &rot13Reader{r}
	io.Copy(os.Stdout, rot13) // 使用 io.Copy 读取并打印 rot13Reader 的输出
}
